Supervised Learning মেশিন লার্নিংয়ের একটি প্রধান শাখা, যেখানে মডেলকে প্রশিক্ষণ দেওয়ার জন্য labeled ডেটাসেট ব্যবহার করা হয়। এই ধরনের লার্নিংয়ে, মডেলকে ইনপুট ডেটা (features) এবং আউটপুট লেবেল (target) উভয়ই দেওয়া হয়। মডেল এই ইনপুট-আউটপুট সম্পর্ক শিখে, ভবিষ্যতে অপরিচিত ইনপুটের জন্য সঠিক আউটপুট পূর্বাভাস দিতে সক্ষম হয়।
Supervised Learning মডেলের কাজের ধরণ
- লেবেলড ডেটা ব্যবহার:
- Supervised Learning এর প্রশিক্ষণ ডেটাসেটের প্রতিটি উদাহরণে ইনপুট এবং তার সাথে সম্পর্কিত সঠিক আউটপুট বা লেবেল থাকে।
- ইনপুট এবং আউটপুট সম্পর্ক শিখা:
- মডেলটি ইনপুট এবং আউটপুটের মধ্যে সম্পর্ক শিখে। তারপর, এটি এই সম্পর্কের ভিত্তিতে নতুন, অচেনা ডেটা পূর্বাভাস করার জন্য ব্যবহৃত হয়।
- প্রশিক্ষণ এবং পরীক্ষণ:
- মডেল প্রথমে প্রশিক্ষণ ডেটাতে প্রশিক্ষিত হয় এবং তারপর পরীক্ষণ ডেটাতে তার পারফরম্যান্স মূল্যায়ন করা হয়।
Supervised Learning এর ধরন
Supervised Learning মডেল দুটি প্রধান শ্রেণীতে বিভক্ত: Classification এবং Regression।
১. Classification
Classification মডেলগুলি নির্দিষ্ট শ্রেণিতে ডেটা শ্রেণিবদ্ধ করতে ব্যবহৃত হয়। এটি এমন একটি প্রক্রিয়া, যেখানে ইনপুট ডেটা কোন শ্রেণিতে পড়বে, তা পূর্বাভাস দেয়। এই ধরনের মডেল সাধারণত বিনিয়োগ সিদ্ধান্ত, স্প্যাম ফিল্টারিং, এবং মুখ চিনতে ব্যবহৃত হয়।
উদাহরণ:
- ইমেইল স্প্যাম ফিল্টার: একটি ইমেইল কি স্প্যাম হবে না সেটি পূর্বাভাস করা।
- রোগ নির্ণয়: রোগের উপস্থিতি বা অনুপস্থিতি চিহ্নিত করা।
মডেল উদাহরণ:
- Logistic Regression
- Decision Tree Classifier
- Random Forest Classifier
- Support Vector Machine (SVM)
- k-Nearest Neighbors (k-NN)
উদাহরণ (Classification):
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# Iris dataset লোড করা
iris = load_iris()
X = iris.data
y = iris.target
# ডেটা ট্রেনিং এবং টেস্টিং সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# মডেল তৈরি এবং প্রশিক্ষণ
model = RandomForestClassifier()
model.fit(X_train, y_train)
# পূর্বাভাস করা
y_pred = model.predict(X_test)
# মডেল মূল্যায়ন
print("Accuracy:", accuracy_score(y_test, y_pred))
২. Regression
Regression মডেলগুলি একটি নির্দিষ্ট মান পূর্বাভাস করতে ব্যবহৃত হয়। এই ধরনের মডেলগুলির কাজ হল একটি চলন্ত সংখ্যার মান (যেমন, মূল্য, গতি, বা আয়) ভবিষ্যদ্বাণী করা।
উদাহরণ:
- বাজার মূল্য পূর্বাভাস: একটি বাড়ির মূল্য ভবিষ্যদ্বাণী করা।
- স্টক মার্কেট: স্টক শেয়ারের মূল্য পূর্বাভাস করা।
মডেল উদাহরণ:
- Linear Regression
- Polynomial Regression
- Ridge Regression
- Lasso Regression
- Decision Trees for Regression
উদাহরণ (Regression):
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# Boston Housing dataset লোড করা
boston = load_boston()
X = boston.data
y = boston.target
# ডেটা ট্রেনিং এবং টেস্টিং সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# মডেল তৈরি এবং প্রশিক্ষণ
model = LinearRegression()
model.fit(X_train, y_train)
# পূর্বাভাস করা
y_pred = model.predict(X_test)
# মডেল মূল্যায়ন
print("Mean Squared Error:", mean_squared_error(y_test, y_pred))
Supervised Learning এর সুবিধা
- সহজ এবং সোজা:
- Supervised Learning মডেলগুলি তুলনামূলকভাবে সহজ এবং বোধগম্য, কারণ এখানে মডেলকে লেবেল করা ডেটা সরবরাহ করা হয়।
- নির্ভুলতা এবং সঠিকতা:
- মডেল পূর্বাভাসের জন্য সঠিক লেবেল ডেটার ওপর প্রশিক্ষিত হওয়ায় এটি সঠিক ফলাফল দেয়।
- অথেনটিকেশন এবং মূল্যায়ন:
- মডেলের কার্যকারিতা সহজে পরীক্ষা করা যায়, কারণ মডেলটিকে পরীক্ষার জন্য সঠিক লেবেল দেওয়া থাকে।
Supervised Learning এর চ্যালেঞ্জ
- ডেটার প্রাপ্যতা:
- Supervised Learning-এর জন্য লেবেলড ডেটা প্রয়োজন, যা অনেক সময় খোঁজা বা প্রস্তুত করা কঠিন।
- ওভারফিটিং (Overfitting):
- মডেল যদি প্রশিক্ষণ ডেটার খুব কাছাকাছি ভবিষ্যদ্বাণী করে, তবে তা নতুন ডেটার জন্য কার্যকরী নাও হতে পারে।
- ডেটা বৈশিষ্ট্য নির্বাচনের জটিলতা:
- ডেটার সমস্ত বৈশিষ্ট্য গুরুত্বপূর্ণ নাও হতে পারে, তাই উপযুক্ত বৈশিষ্ট্য নির্বাচন করা গুরুত্বপূর্ণ।
সারাংশ
Supervised Learning মডেলগুলির সাহায্যে মেশিন লার্নিং প্রকল্পগুলোতে বিভিন্ন ডেটা প্রক্রিয়া করা এবং পূর্বাভাস তৈরি করা হয়। এটি Classification এবং Regression ধরনের মডেল হিসেবে বিভক্ত। এই মডেলগুলি ডেটা থেকে সঠিক সম্পর্ক শিখে ভবিষ্যতে নতুন ডেটার জন্য সঠিক পূর্বাভাস দিতে সক্ষম হয়। তবে, এর জন্য লেবেলড ডেটার প্রয়োজন এবং কিছু চ্যালেঞ্জ মোকাবিলা করতে হয়।
লিনিয়ার রিগ্রেশন একটি মৌলিক পরিসংখ্যানগত পদ্ধতি যা নির্দিষ্ট ডেটাসেটের মধ্যে দুটি বা তার বেশি ভেরিয়েবলের মধ্যে সম্পর্ক বিশ্লেষণ এবং মডেল করার জন্য ব্যবহৃত হয়। এটি একটি সাধারণ রিগ্রেশন মডেল, যা নির্দিষ্ট একটি পরিবর্তনশীল (ডিপেনডেন্ট ভেরিয়েবল) এর মান পূর্বানুমান করতে ব্যবহৃত হয়, অন্য যে কোনো এক বা একাধিক পরিবর্তনশীল (ইন্ডিপেনডেন্ট ভেরিয়েবল) এর সাহায্যে।
লিনিয়ার রিগ্রেশন মূলত রিগ্রেশন অ্যালগরিদম হিসেবে পরিচিত যা সোজা একটি রেখা (straight line) ব্যবহার করে ডেটার মধ্যে সম্পর্ক তৈরি করে এবং ভবিষ্যৎ মান পূর্বানুমান করার জন্য একটি সূত্র তৈরি করে।
লিনিয়ার রিগ্রেশন সূত্র:
লিনিয়ার রিগ্রেশনের সাধারণ ফর্ম হলো:
এখানে,
- হল নির্ভরশীল পরিবর্তনশীল (dependent variable)।
- হল স্বাধীন পরিবর্তনশীল (independent variable)।
- হল স্লোপ (slope), যা X-এর প্রতি Y-র পরিবর্তনকে প্রতিনিধিত্ব করে।
- হল ইন্টারসেপ্ট (intercept), যা রেখা Y অক্ষের সাথে কোথায় ছেদ করে তা নির্দেশ করে।
লিনিয়ার রিগ্রেশনের ধাপগুলি:
- ডেটা সংগ্রহ:
- প্রথমে ডেটা সংগ্রহ করতে হয়, যা X (স্বাধীন ভেরিয়েবল) এবং Y (নির্ভরশীল ভেরিয়েবল) এর মধ্যে সম্পর্ক বোঝায়।
- ডেটা প্রক্রিয়াকরণ:
- মিসিং ডেটা পরিষ্কার করা, ডেটা ফিল্টার এবং রূপান্তর করা।
- মডেল তৈরি:
- মডেল তৈরি করতে স্কikit-learn এর LinearRegression ক্লাস ব্যবহার করা হয়।
- মডেল প্রশিক্ষণ:
- X এবং Y এর ওপর ভিত্তি করে মডেলটি প্রশিক্ষণ দেওয়া হয়।
- পূর্বাভাস করা:
- প্রশিক্ষিত মডেল ব্যবহার করে নতুন ডেটার ওপর পূর্বাভাস করা হয়।
- মডেল মূল্যায়ন:
- মডেলের কার্যকারিতা মূল্যায়ন করতে Mean Squared Error (MSE) বা R-squared ব্যবহার করা হয়।
লিনিয়ার রিগ্রেশন মডেল তৈরি করা:
ধরা যাক, আমরা একটি উদাহরণ নিয়ে কাজ করছি যেখানে গাড়ির দাম (Y) নির্ভর করে গাড়ির বয়স (X)-এর ওপর।
উদাহরণ:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
# উদাহরণ ডেটা: গাড়ির বয়স (X) এবং দাম (Y)
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) # গাড়ির বয়স (1, 2, 3, 4, 5 বছর)
Y = np.array([10000, 9000, 8000, 6000, 5000]) # দাম (ডলার)
# ডেটা ভাগ করা (train ও test)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)
# মডেল তৈরি
model = LinearRegression()
# মডেল প্রশিক্ষণ
model.fit(X_train, Y_train)
# পূর্বাভাস করা
Y_pred = model.predict(X_test)
# মডেল ইন্টারসেপ্ট ও স্লোপ
print(f'ইন্টারসেপ্ট (b): {model.intercept_}')
print(f'স্লোপ (m): {model.coef_}')
# গ্রাফে মডেলটি প্রদর্শন
plt.scatter(X, Y, color='blue') # প্রকৃত ডেটা
plt.plot(X, model.predict(X), color='red') # লিনিয়ার রিগ্রেশন রেখা
plt.xlabel('গাড়ির বয়স (বছর)')
plt.ylabel('গাড়ির দাম (ডলার)')
plt.title('লিনিয়ার রিগ্রেশন: গাড়ির দাম পূর্বাভাস')
plt.show()
# মডেল মূল্যায়ন (R-squared)
print(f'R-squared: {model.score(X_test, Y_test)}')
বিশ্লেষণ:
- স্লোপ (m): স্লোপ নির্দেশ করে, গাড়ির বয়স এক বছর বাড়লে গাড়ির দাম কতটা পরিবর্তিত হয়।
- ইন্টারসেপ্ট (b): ইন্টারসেপ্ট হল Y অক্ষের সাথে রেখার ছেদ।
- R-squared: এটি মডেলের কার্যকারিতা পরিমাপ করার জন্য ব্যবহৃত হয়। R-squared মান যত বেশি, মডেলটি তত ভাল পূর্বাভাস দেয়।
লিনিয়ার রিগ্রেশন মডেলের মূল্যায়ন
লিনিয়ার রিগ্রেশন মডেল মূল্যায়ন করার জন্য কয়েকটি সাধারণ মেট্রিক ব্যবহার করা হয়:
- Mean Squared Error (MSE):
- MSE হল পূর্বাভাস এবং প্রকৃত মানের মধ্যে গড় বিচ্যুতি। কম MSE মানে ভাল মডেল।
- R-squared:
- R-squared হল মডেলটির পারফরম্যান্স পরিমাপের একটি মাধ্যম। এটি বলে দেয় মডেলটি কতটা ডেটাকে ব্যাখ্যা করতে সক্ষম।
উদাহরণ:
from sklearn.metrics import mean_squared_error
# Mean Squared Error (MSE)
mse = mean_squared_error(Y_test, Y_pred)
print(f'Mean Squared Error (MSE): {mse}')
সারাংশ
লিনিয়ার রিগ্রেশন একটি শক্তিশালী এবং সহজ পদ্ধতি যা দুইটি বা তার বেশি ভেরিয়েবলের মধ্যে সম্পর্ক বিশ্লেষণ করতে ব্যবহৃত হয়। এটি মূলত ডেটার একটি সরল রেখা তৈরি করে এবং সেই রেখার মাধ্যমে ভবিষ্যতের মান পূর্বাভাস করে। মেশিন লার্নিং এবং পরিসংখ্যান গবেষণায় এটি অত্যন্ত জনপ্রিয় এবং গুরুত্বপূর্ণ।
লিনিয়ার রিগ্রেশন একটি পরিসংখ্যানগত পদ্ধতি যা দুটি ভেরিয়েবলের মধ্যে সম্পর্কের বিশ্লেষণ করতে ব্যবহৃত হয়। এটি একটি নির্দিষ্ট সামঞ্জস্যপূর্ণ সম্পর্ক (linear relationship) খুঁজে বের করতে সাহায্য করে, যেখানে একটি ভেরিয়েবল অন্য একটি ভেরিয়েবলের ওপর নির্ভরশীল থাকে। সাধারণভাবে, এটি একটি সরল রেখা আঁকার মাধ্যমে দুটি ভেরিয়েবলের মধ্যে সম্পর্ক প্রকাশ করে।
লিনিয়ার রিগ্রেশন সাধারণত ডিপেনডেন্ট ভেরিয়েবল (Dependent Variable বা Y) এবং ইন্ডিপেনডেন্ট ভেরিয়েবল (Independent Variable বা X) এর মধ্যে সম্পর্ক বিশ্লেষণ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, একটি কোম্পানির বিজ্ঞাপন ব্যয় (X) এবং বিক্রির পরিমাণ (Y) এর মধ্যে সম্পর্ক বিশ্লেষণ।
লিনিয়ার রিগ্রেশন সূত্র
লিনিয়ার রিগ্রেশন সাধারণত সরাসরি সম্পর্ক (linear relationship) প্রকাশ করতে একটি সরল রেখার (straight line) ব্যবহার করে, যার সূত্রটি এই রকম:
- Y: নির্ভরশীল ভেরিয়েবল (Dependent Variable)
- X: স্বাধীন ভেরিয়েবল (Independent Variable)
- a: রেখার শুরুর পয়েন্ট (Intercept)
- b: স্লোপ বা ঢাল (Slope), যা X-এর প্রতি Y এর প্রতিক্রিয়া বা সম্পর্কের পরিমাপ।
লিনিয়ার রিগ্রেশন-এর উদ্দেশ্য
লিনিয়ার রিগ্রেশন মূলত দুটি ভেরিয়েবলের মধ্যে সম্পর্কের সরাসরি সম্পর্ক খুঁজে বের করতে ব্যবহৃত হয়। এটি পরবর্তী সময়ে ভবিষ্যদ্বাণী করতে সহায়ক হয়।
- সহজ সম্পর্ক নির্ধারণ: দুটি ভেরিয়েবলের মধ্যে সরল সম্পর্ক খুঁজে বের করার জন্য।
- ভবিষ্যদ্বাণী: X-এর মান জানলে Y এর মান কেমন হতে পারে, এটি অনুমান করার জন্য।
- ডেটার প্যাটার্ন বুঝতে: ডেটার মধ্যে যে সম্পর্ক কাজ করছে তা বোঝার জন্য।
লিনিয়ার রিগ্রেশন এর কাজের প্রক্রিয়া
লিনিয়ার রিগ্রেশন চলাকালে মডেলটি ডেটার জন্য একটি রেখা আঁকে, যা সর্বনিম্ন বর্গফল পদ্ধতি (Least Squares Method) ব্যবহার করে সরল রেখা আঁকার চেষ্টা করে। এর মানে হল যে, মডেলটি লক্ষ্য করে যে, রেখার কাছাকাছি ডেটা পয়েন্টগুলির সংখ্যা সর্বাধিক হবে এবং এইভাবে রিগ্রেশন মডেলটির অনুমান সঠিক হবে।
লিনিয়ার রিগ্রেশন এর প্রকার
১. একটি ভেরিয়েবলের জন্য লিনিয়ার রিগ্রেশন (Simple Linear Regression):
- এই পদ্ধতিতে একটি নির্ভরশীল ভেরিয়েবল (Y) এবং একটি স্বাধীন ভেরিয়েবল (X) এর মধ্যে সরল সম্পর্ক বিশ্লেষণ করা হয়।
- উদাহরণ: বিজ্ঞাপন ব্যয় এবং বিক্রির মধ্যে সম্পর্ক।
ফর্মুলা:
২. একাধিক ভেরিয়েবলের জন্য লিনিয়ার রিগ্রেশন (Multiple Linear Regression):
- এখানে একটি নির্ভরশীল ভেরিয়েবলের (Y) সঙ্গে একাধিক স্বাধীন ভেরিয়েবল (X1, X2, ..., Xn) এর সম্পর্ক বিশ্লেষণ করা হয়।
- উদাহরণ: বিক্রির উপর বিজ্ঞাপন ব্যয়, মূল্য, এবং প্রচারের সংখ্যা এর প্রভাব।
ফর্মুলা:
লিনিয়ার রিগ্রেশন এর ব্যবহার
- ব্যবসায়িক সিদ্ধান্ত গ্রহণ:
- লিনিয়ার রিগ্রেশন ব্যবসায়িক ক্ষেত্রে ব্যবহৃত হয় ভবিষ্যদ্বাণী এবং সিদ্ধান্ত গ্রহণের জন্য, যেমন বিক্রির পরিমাণ ভবিষ্যদ্বাণী করা।
- অর্থনৈতিক বিশ্লেষণ:
- অর্থনৈতিক পরিসংখ্যান বিশ্লেষণ এবং ভবিষ্যদ্বাণী করার জন্য ব্যবহৃত হয়, যেমন মুদ্রাস্ফীতি এবং জিডিপির মধ্যে সম্পর্ক।
- বিজ্ঞান এবং প্রকৌশল:
- বিজ্ঞান ও প্রকৌশল ক্ষেত্রেও একাধিক ভেরিয়েবলের মধ্যে সম্পর্ক বিশ্লেষণ করতে এবং বিভিন্ন পরিমাপের ভবিষ্যদ্বাণী করতে লিনিয়ার রিগ্রেশন ব্যবহার করা হয়।
লিনিয়ার রিগ্রেশন উদাহরণ
ধরা যাক, আমাদের কাছে একটি ডেটাসেট রয়েছে যেখানে বিজ্ঞাপন ব্যয়ের পরিমাণ (X) এবং বিক্রির পরিমাণ (Y) দেওয়া আছে, এবং আমরা জানি যে তাদের মধ্যে একটি সরল সম্পর্ক রয়েছে। এই ডেটার ওপর লিনিয়ার রিগ্রেশন প্রয়োগ করলে আমরা বিজ্ঞাপন ব্যয়ের ওপর বিক্রির পরিমাণের ভবিষ্যদ্বাণী করতে সক্ষম হবো।
উদাহরণ কোড (Python with Scikit-learn):
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# ডেটা
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) # বিজ্ঞাপন ব্যয়
Y = np.array([1, 2, 2.8, 4.1, 5.2]) # বিক্রি
# মডেল তৈরি
model = LinearRegression()
model.fit(X, Y)
# ভবিষ্যদ্বাণী
Y_pred = model.predict(X)
# প্লট
plt.scatter(X, Y, color='blue', label='ডেটা পয়েন্ট')
plt.plot(X, Y_pred, color='red', label='রিগ্রেশন রেখা')
plt.xlabel('বিজ্ঞাপন ব্যয়')
plt.ylabel('বিক্রি')
plt.title('লিনিয়ার রিগ্রেশন')
plt.legend()
plt.show()
এই কোডটি একটি সরল লিনিয়ার রিগ্রেশন মডেল তৈরি করবে এবং বিজ্ঞাপন ব্যয়ের উপর বিক্রির পরিমাণের সম্পর্ক দেখাবে।
সারাংশ
লিনিয়ার রিগ্রেশন একটি সরল পরিসংখ্যান পদ্ধতি যা দুটি ভেরিয়েবলের মধ্যে সম্পর্ক বিশ্লেষণ করতে ব্যবহৃত হয়। এটি একটি সরল রেখার মাধ্যমে সম্পর্কের উপর ভিত্তি করে ভবিষ্যদ্বাণী করার জন্য ব্যবহৃত হয়। এটি ব্যবসা, অর্থনীতি, বিজ্ঞান, প্রকৌশল এবং অন্যান্য ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করে।
লিনিয়ার রিগ্রেশন হল একটি পরিসংখ্যানগত পদ্ধতি যা একটি নির্ভরশীল পরিবর্তনশীল (dependent variable) এবং একটি বা একাধিক স্বাধীন পরিবর্তনশীল (independent variable) এর মধ্যে সম্পর্ক খুঁজে বের করতে ব্যবহৃত হয়। এটি সাধারণত ভবিষ্যদ্বাণী বা প্রবণতা বিশ্লেষণ করার জন্য ব্যবহৃত হয়।
এখানে আমরা একটি সাধারণ লিনিয়ার রিগ্রেশন মডেল তৈরি করবো যা একটি নির্ভরশীল এবং একটি স্বাধীন ভেরিয়েবল নিয়ে কাজ করবে। এর জন্য আমরা Scikit-learn লাইব্রেরি ব্যবহার করব, যা মেশিন লার্নিং মডেল তৈরির জন্য একটি জনপ্রিয় পাইথন লাইব্রেরি।
১. লাইব্রেরি ইনস্টল করা
প্রথমে নিশ্চিত করুন যে আপনি Scikit-learn লাইব্রেরিটি ইনস্টল করেছেন। যদি না থাকে, তাহলে এটি ইনস্টল করতে পারেন:
pip install scikit-learn
২. লিনিয়ার রিগ্রেশন মডেল তৈরি করা
এখন আমরা একটি সাধারণ উদাহরণ দিয়ে দেখাবো যেখানে আমরা একটি নির্ভরশীল (y) এবং একটি স্বাধীন (x) ভেরিয়েবল ব্যবহার করবো।
কোড উদাহরণ:
# প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট করা
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# ডেটা তৈরি করা (x এবং y)
# ধরুন, x হলো বিজ্ঞাপনে ব্যয়, এবং y হলো বিক্রয়
x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).reshape(-1, 1) # বিজ্ঞাপনে ব্যয়
y = np.array([1, 2, 1.3, 3.75, 2.25, 4.3, 4.8, 5.2, 6.3, 7.8]) # বিক্রয়
# ডেটা ট্রেনিং এবং টেস্টিং সেটে ভাগ করা
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
# লিনিয়ার রিগ্রেশন মডেল তৈরি করা
model = LinearRegression()
# মডেল প্রশিক্ষণ
model.fit(x_train, y_train)
# মডেল দ্বারা পূর্বাভাস করা
y_pred = model.predict(x_test)
# মডেলের পারফরম্যান্স মূল্যায়ন
print("Mean squared error:", mean_squared_error(y_test, y_pred))
print("R^2 score:", r2_score(y_test, y_pred))
# মডেল কোএফিসিয়েন্ট এবং ইন্টারসেপ্ট
print("Slope (Coefficient):", model.coef_)
print("Intercept:", model.intercept_)
# মডেলটির লাইন প্লট করা
plt.scatter(x, y, color='blue', label='Actual data') # আসল ডেটা
plt.plot(x, model.predict(x), color='red', label='Regression line') # রিগ্রেশন লাইন
plt.xlabel('Advertising Spend')
plt.ylabel('Sales')
plt.title('Linear Regression Example')
plt.legend()
plt.show()
কোডের ব্যাখ্যা:
- ডেটা তৈরি: এখানে আমরা একটি সিমুলেটেড ডেটাসেট তৈরি করেছি, যেখানে
xহলো বিজ্ঞাপনে ব্যয় এবংyহলো বিক্রয়। - ডেটা ভাগ করা:
train_test_split()ফাংশনটি ডেটাকে প্রশিক্ষণ (training) এবং পরীক্ষণ (testing) সেটে ভাগ করে, যাতে আমরা প্রশিক্ষণ ডেটা দিয়ে মডেল ট্রেনিং করতে পারি এবং টেস্ট ডেটার উপর তার কার্যকারিতা যাচাই করতে পারি। - মডেল প্রশিক্ষণ:
LinearRegression()মডেল তৈরি করা হয় এবংfit()মেথড দিয়ে মডেলটি প্রশিক্ষিত হয়। - পূর্বাভাস: মডেলটি
predict()মেথড দিয়ে টেস্ট ডেটার উপর পূর্বাভাস প্রদান করে। - মডেল মূল্যায়ন:
mean_squared_error()এবংr2_score()মেথড দ্বারা মডেলটির কার্যকারিতা মূল্যায়ন করা হয়।r2_score()হলো মডেলটির পারফরম্যান্স মূল্যায়নের জন্য ব্যবহৃত স্কোর। - গ্রাফ তৈরি: মডেলটির আসল ডেটা এবং রিগ্রেশন লাইনের সাথে একটি scatter plot তৈরি করা হয় যাতে আমরা আসল ডেটা এবং মডেল থেকে প্রাপ্ত রিগ্রেশন লাইনের তুলনা করতে পারি।
আউটপুট:
আপনি যখন এই কোডটি চালাবেন, তখন নিচের তথ্যগুলো দেখতে পাবেন:
- Mean squared error: এটি মডেলটির পূর্বাভাসের গড় ত্রুটির মাপ।
- R² score: এটি মডেলটির বৈশিষ্ট্যের মাপ, যেখানে ১ মানে পুরোপুরি সঠিক এবং ০ মানে মডেলটি কোনো তথ্যের সাথে সম্পর্কিত নয়।
- Slope (Coefficient): এটি রিগ্রেশন লাইনের ঢাল, অর্থাৎ, প্রতি একক পরিবর্তনে y-মান কত পরিবর্তিত হয়।
- Intercept: এটি রিগ্রেশন লাইনের ইন্টারসেপ্ট, অর্থাৎ, x = 0 হলে y-মান কী হবে।
এছাড়া, আপনি একটি গ্রাফ দেখতে পাবেন যেখানে আপনার আসল ডেটা এবং রিগ্রেশন লাইন একত্রে প্রদর্শিত হবে।
সারাংশ
এই উদাহরণে আমরা দেখলাম কীভাবে পাইথন দিয়ে একটি লিনিয়ার রিগ্রেশন মডেল তৈরি করতে হয়, যেখানে আমরা ডেটা বিশ্লেষণ করতে Scikit-learn লাইব্রেরি ব্যবহার করেছি। লিনিয়ার রিগ্রেশন মডেলটি ভবিষ্যদ্বাণী (prediction) করতে এবং ডেটার মধ্যে সম্পর্ক বুঝতে একটি খুবই শক্তিশালী উপায়।
কৃত্রিম বুদ্ধিমত্তা (AI) এবং মেশিন লার্নিং (ML) মডেল তৈরির পর, সেগুলির কার্যকারিতা বা পারফরম্যান্স মূল্যায়ন করা অত্যন্ত গুরুত্বপূর্ণ। Mean Squared Error (MSE) এবং R-Squared (R²) হল দুটি জনপ্রিয় পরিমাপক যা রিগ্রেশন মডেলের কার্যকারিতা মূল্যায়ন করতে ব্যবহৃত হয়।
১. Mean Squared Error (MSE)
Mean Squared Error (MSE) হল একটি পরিমাপক যা রিগ্রেশন মডেলের ত্রুটি বা Error (অথবা ভুল পূর্বাভাস) পরিমাপ করে। এটি প্রকৃত মান এবং পূর্বাভাস করা মানের মধ্যে পার্থক্যের বর্গের গড়। ছোট MSE মান ভাল মডেল নির্দেশ করে, কারণ এর মান যত কম হবে, মডেলটির পূর্বাভাস তত সঠিক হবে।
সূত্র:
যেখানে:
- হলো প্রকৃত মান (Actual value),
- হলো পূর্বাভাস (Predicted value),
- হলো ডেটার সংখ্যা।
বৈশিষ্ট্য:
- MSE সব সময় ধনাত্মক মান (positive value) হয়।
- এর মান যত ছোট হবে, মডেল তত ভালো।
- MSE আউটলায়ারের জন্য খুবই সংবেদনশীল (sensitive)।
উদাহরণ:
from sklearn.metrics import mean_squared_error
# প্রকৃত মান (Actual values)
y_actual = [3, -0.5, 2, 7]
# পূর্বাভাস মান (Predicted values)
y_pred = [2.5, 0.0, 2, 8]
# MSE গণনা করা
mse = mean_squared_error(y_actual, y_pred)
print(f'Mean Squared Error: {mse}')
২. R-Squared (R²)
R-Squared (R²) বা কোঅফিসিয়েন্ট অব ডetermination হলো একটি পরিমাপক যা মডেলটির পূর্বাভাসের সাথে প্রকৃত মানের কতটা সম্পর্ক রয়েছে তা পরিমাপ করে। R² পরিমাপক ০ এবং ১ এর মধ্যে থাকে:
- R² = 1: এটি নির্দেশ করে যে মডেলটি পুরোপুরি সঠিক, অর্থাৎ মডেল দ্বারা পূর্বাভাস করা মান এবং প্রকৃত মানের মধ্যে পূর্ণ সাদৃশ্য রয়েছে।
- R² = 0: এটি নির্দেশ করে যে মডেলটি ডেটার মধ্যে কোনো সম্পর্ক ব্যাখ্যা করতে পারছে না।
সূত্র:
যেখানে:
- হলো প্রকৃত মান,
- হলো পূর্বাভাস মান,
- হলো প্রকৃত মানের গড়।
বৈশিষ্ট্য:
- R² এর মান ০ থেকে ১ এর মধ্যে থাকে।
- R² যত বেশি হবে, মডেলটি তত ভাল হবে, কারণ তা বেশি বৈশিষ্ট্যযুক্ত ডেটার ভ্যারিয়েন্স (variance) ব্যাখ্যা করে।
- এটি সাধারণত রিগ্রেশন মডেলের কার্যকারিতা মূল্যায়নে ব্যবহৃত হয়।
উদাহরণ:
from sklearn.metrics import r2_score
# প্রকৃত মান (Actual values)
y_actual = [3, -0.5, 2, 7]
# পূর্বাভাস মান (Predicted values)
y_pred = [2.5, 0.0, 2, 8]
# R² গণনা করা
r_squared = r2_score(y_actual, y_pred)
print(f'R-Squared: {r_squared}')
MSE এবং R² এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Mean Squared Error (MSE) | R-Squared (R²) |
|---|---|---|
| মূল্য পরিসর | ০ থেকে ∞ পর্যন্ত (সবসময় ধনাত্মক) | ০ থেকে ১ পর্যন্ত, কখনও কখনও নেতিবাচকও হতে পারে |
| কী পরিমাপ করে | মডেল দ্বারা পূর্বাভাসের ত্রুটি (error) পরিমাপ করে | মডেলটি কতটা সঠিকভাবে ডেটার ভ্যারিয়েন্স ব্যাখ্যা করে |
| তথ্য ভরসাযোগ্যতা | আউটলায়ারের প্রতি সংবেদনশীল (Sensitive to outliers) | আউটলায়ারের প্রতি কম সংবেদনশীল (Less sensitive) |
| বড় মানের অর্থ | ত্রুটি বেশি, মডেল ভালো নয় | R² মান ছোট হলে মডেল কম সঠিক |
| ছোট মানের অর্থ | মডেল অধিক সঠিক এবং ছোট ত্রুটি (বেশি মানের পার্থক্য না থাকলে) | R² মান বড় হলে মডেল ভালো |
MSE এবং R² উভয় ব্যবহার করার সুবিধা
- MSE সাধারণত ত্রুটির আকার এবং ভ্যালিডিটি মূল্যায়ন করতে ব্যবহার করা হয়, তবে এটি আউটলায়ারের প্রতি সংবেদনশীল এবং শুধুমাত্র ত্রুটির মান দেয়।
- R² মডেলটির সামগ্রিক কার্যকারিতা এবং প্রকৃত মানের সাথে সম্পর্কের স্তর পরিমাপ করতে সাহায্য করে। R² এর সাহায্যে আপনি মডেলের ক্ষমতা বুঝতে পারেন এবং এর ভিত্তিতে সিদ্ধান্ত নিতে পারেন।
সারাংশ
Mean Squared Error (MSE) এবং R-Squared (R²) হল দুটি গুরুত্বপূর্ণ মেট্রিক যা রিগ্রেশন মডেলগুলির কার্যকারিতা পরিমাপ করতে ব্যবহৃত হয়। MSE ত্রুটি পরিমাপ করে এবং ছোট মানে ভাল মডেল নির্দেশ করে, যখন R² মডেলটির কতটা সঠিকভাবে ডেটার ভ্যারিয়েন্স ব্যাখ্যা করছে তা পরিমাপ করে, এবং উচ্চ R² মান ভাল মডেল নির্দেশ করে। দুইটি মেট্রিক একসাথে ব্যবহার করলে মডেলের উন্নয়ন এবং মূল্যায়ন সহজ হয়।
লজিস্টিক রিগ্রেশন (Logistic Regression) একটি সাধারণ এবং জনপ্রিয় মেশিন লার্নিং অ্যালগরিদম যা প্রধানত ক্লাসিফিকেশন সমস্যার জন্য ব্যবহৃত হয়। এটি একটি সুপারভাইজড লার্নিং মেথড, যেখানে আউটপুট একটি নির্দিষ্ট শ্রেণিতে বিভক্ত থাকে (যেমন ০ বা ১, সত্য বা মিথ্যা, ধনী বা দরিদ্র)।
লজিস্টিক রিগ্রেশন মূলত রিগ্রেশন অ্যালগরিদম হিসেবে নামকরণ হলেও, এটি আসলে ক্লাসিফিকেশন সমস্যা সমাধান করে। এটি আউটপুট হিসেবে প্রোবেবিলিটি প্রদান করে এবং একটি থ্রেশহোল্ড (সাধারণত ০.৫) ব্যবহার করে ক্লাস নির্ধারণ করে।
লজিস্টিক রিগ্রেশন এর মূল ধারণা
লজিস্টিক রিগ্রেশন একটি সিগময়েড (Sigmoid) ফাংশন ব্যবহার করে আউটপুট প্রেডিক্ট করে। সিগময়েড ফাংশন (যার আরেকটি নাম লজিস্টিক ফাংশন) একটি S আকারের কেলভিনকারি কার্ভ তৈরি করে, যা মান ০ এবং ১ এর মধ্যে সীমাবদ্ধ থাকে। এটি প্রোবেবিলিটি প্রদান করে এবং সেই প্রোবেবিলিটি দিয়ে কনক্লুসন করা হয়।
সিগময়েড ফাংশনের সমীকরণ:
যেখানে,
- হলো ইনপুট ফিচার এবং হলো মডেলের প্যারামিটার।
সিগময়েড ফাংশন:
- আউটপুট ০ থেকে ১ এর মধ্যে থাকে এবং এটি একটি সম্ভাব্যতা মান প্রদান করে।
লজিস্টিক রিগ্রেশন এর কাজের ধাপ:
- ইনপুট ডেটা: মডেলটির জন্য একাধিক ফিচার (বিশ্লেষিত ডেটা) গ্রহণ করা হয়।
- প্যারামিটার অনুমান: প্রতিটি ইনপুট ফিচারের জন্য প্যারামিটারগুলি () অনুমান করা হয়।
- সিগময়েড ফাংশন: ইনপুট ডেটার উপর সিগময়েড ফাংশন প্রয়োগ করা হয় এবং আউটপুট প্রোবেবিলিটি নির্ধারণ করা হয়।
- থ্রেশহোল্ড নির্ধারণ: প্রোবেবিলিটি ০.৫ এর বেশি হলে ১ এবং ০.৫ এর কম হলে ০ সিদ্ধান্ত নেওয়া হয়।
লজিস্টিক রিগ্রেশন এর ধরন
- বাইনরি লজিস্টিক রিগ্রেশন (Binary Logistic Regression):
- এটি দুটি শ্রেণি বা ক্লাসের মধ্যে সিদ্ধান্ত নেয় (যেমন ০ বা ১, সত্য বা মিথ্যা, উপস্থিত বা অনুপস্থিত)।
- মাল্টিনোমিয়াল লজিস্টিক রিগ্রেশন (Multinomial Logistic Regression):
- এটি একাধিক শ্রেণি বা ক্লাসের মধ্যে সিদ্ধান্ত নেয়। যেমন, তিনটি বা তার বেশি শ্রেণির মধ্যে।
- অর্ডিনাল লজিস্টিক রিগ্রেশন (Ordinal Logistic Regression):
- এটি এমন পরিস্থিতিতে ব্যবহৃত হয় যেখানে শ্রেণিগুলি একটি বিশেষ ধরনের অর্ডারে থাকে (যেমন, ছোট, মাঝারি, বড়)।
লজিস্টিক রিগ্রেশন এর ব্যবহার
- বাইনরি ক্লাসিফিকেশন: একটি প্রডিকশন ক্লাস (যেমন, রোগী অসুস্থ কিনা, ইমেইল স্প্যাম কিনা)।
- মাল্টি-ক্লাস ক্লাসিফিকেশন: একাধিক শ্রেণি সম্পর্কিত সিদ্ধান্ত (যেমন, ইমেইল ক্যাটেগরি, বস্তু শনাক্তকরণ)।
- বিনিয়োগ বিশ্লেষণ: একটি স্টক লাভজনক কিনা, এটি বৃদ্ধির সম্ভাবনা কতটুকু ইত্যাদি।
লজিস্টিক রিগ্রেশন মডেল ট্রেইনিং
লজিস্টিক রিগ্রেশন মডেলটি ট্রেইন করতে লগ-লস ফাংশন (Log-Loss Function) ব্যবহার করা হয়। এটি মডেলটির প্যারামিটারগুলিকে অপটিমাইজ করতে সাহায্য করে।
লগ-লস ফাংশন:
যেখানে,
- হলো আসল আউটপুট,
- হলো সিগময়েড ফাংশন দ্বারা পূর্বাভাসিত আউটপুট।
প্যারামিটার অপটিমাইজেশন:
এই ফাংশনটি মডেলকে এমনভাবে প্যারামিটারগুলো (যেমন, ) আপডেট করতে সহায়ক, যাতে এটি সঠিক পূর্বাভাস দেয়।
স্কikit-learn দিয়ে লজিস্টিক রিগ্রেশন
Python এ scikit-learn লাইব্রেরি ব্যবহার করে লজিস্টিক রিগ্রেশন মডেল খুব সহজে তৈরি এবং প্রশিক্ষণ করা যায়। নিচে একটি উদাহরণ দেওয়া হল।
ইনস্টলেশন:
pip install scikit-learn
উদাহরণ কোড:
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# উদাহরণ ডেটা তৈরি করা
data = {'Age': [22, 25, 47, 52, 46],
'Salary': [20000, 25000, 55000, 65000, 50000],
'Purchased': [0, 0, 1, 1, 1]} # 0=No, 1=Yes
df = pd.DataFrame(data)
# ইনপুট এবং আউটপুট ফিচার পৃথক করা
X = df[['Age', 'Salary']] # ইনপুট ফিচার
y = df['Purchased'] # আউটপুট ফিচার
# ডেটা ট্রেনিং এবং টেস্টিং সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# মডেল তৈরি এবং প্রশিক্ষণ
model = LogisticRegression()
model.fit(X_train, y_train)
# পূর্বাভাস করা
y_pred = model.predict(X_test)
# মডেল মূল্যায়ন
print("Accuracy:", accuracy_score(y_test, y_pred))
লজিস্টিক রিগ্রেশন এর সুবিধা ও অসুবিধা
সুবিধা:
- সহজ এবং দ্রুত: লজিস্টিক রিগ্রেশন মডেল খুবই সহজ এবং দ্রুত প্রশিক্ষণ হয়।
- অনুভূতি বোঝার ক্ষমতা: মডেলটি বাস্তবিকভাবে যে ডেটা দ্বারা শিখছে তা বোঝা যায় (উদাহরণ: ফিচারের গুরুত্ব)।
- পারফরম্যান্স: ভালো ফলাফল দেয় যদি ডেটা লিনিয়ার হতে থাকে।
অসুবিধা:
- লিনিয়ার সীমাবদ্ধতা: শুধুমাত্র লিনিয়ার সম্পর্কযুক্ত ডেটাতে ভাল কাজ করে, অ্যানোন-লিনিয়ার সম্পর্কের জন্য কাজ করে না।
- অল্প ডেটার সমস্যা: যদি ডেটা খুব কম থাকে, তবে মডেলটি ঠিকভাবে কাজ নাও করতে পারে।
সারাংশ
লজিস্টিক রিগ্রেশন একটি জনপ্রিয় এবং সহজ কৌশল যা মূলত ক্লাসিফিকেশন সমস্যার জন্য ব্যবহৃত হয়। এটি সিগময়েড ফাংশন ব্যবহার করে আউটপুট হিসাব করে এবং এই আউটপুটের ভিত্তিতে ০ অথবা ১ ক্লাস নির্ধারণ করে। এটি সহজ, দ্রুত এবং কার্যকর, তবে শুধুমাত্র লিনিয়ার সম্পর্কযুক্ত ডেটার জন্য উপযুক্ত।
লজিস্টিক রিগ্রেশন (Logistic Regression) হলো একটি জনপ্রিয় সুপারভাইজড লার্নিং (Supervised Learning) অ্যালগরিদম, যা মূলত ক্লাসিফিকেশন সমস্যা সমাধানে ব্যবহৃত হয়। যদিও এটি "রিগ্রেশন" নামে পরিচিত, এটি মূলত শ্রেণীবিভাগের (classification) কাজ করে, যেমন দুটি শ্রেণির মধ্যে পার্থক্য নির্ধারণ করা (যেমন, স্প্যাম বা নন-স্প্যাম, রোগী বা সুস্থ)।
লজিস্টিক রিগ্রেশন একটি লিনিয়ার মডেল যা একটি নির্দিষ্ট আউটপুট শ্রেণী (যেমন, 0 বা 1) নির্ধারণ করতে একটি লজিস্টিক ফাংশন বা সিগময়েড ফাংশন ব্যবহার করে।
লজিস্টিক রিগ্রেশন মডেলের মূল ধারণা:
- লিনিয়ার রিগ্রেশন এর মতো, এটি ইনপুট ফিচারগুলোর (এনট্রি) ভিত্তিতে একটি লিনিয়ার সম্পর্ক তৈরি করে, তবে আউটপুট একটি নির্দিষ্ট সীমার মধ্যে (0 থেকে 1) থাকে। এই সীমা নির্ধারণ করতে সিগময়েড ফাংশন ব্যবহৃত হয়, যা একটি সিগময়েড (S-shaped) বক্ররেখা তৈরি করে।
- সিগময়েড ফাংশনটি ইনপুট মানের উপর ভিত্তি করে একটি সম্ভাব্যতা (probability) প্রদান করে, যা পরে একটি শ্রেণীতে (0 বা 1) রূপান্তরিত হয়।
সিগময়েড ফাংশনটি দেখতে এমন:
এখানে, হলো ইনপুটের লিনিয়ার সমন্বয়, এবং ফলস্বরূপ সিগময়েড ফাংশনটি 0 থেকে 1 এর মধ্যে একটি মান প্রদান করে।
Logistic Regression এর প্রয়োজনীয়তা
১. দ্বিতীয় শ্রেণীবিভাগ (Binary Classification) সমস্যার জন্য উপযোগী:
লজিস্টিক রিগ্রেশন সাধারণত দ্বিতীয় শ্রেণীবিভাগ সমস্যার জন্য ব্যবহৃত হয়, যেখানে আউটপুট ভেরিয়েবল দুটি শ্রেণি (যেমন, 0 বা 1, সত্য বা মিথ্যা) হতে পারে। উদাহরণস্বরূপ:
- ইমেইল স্প্যাম ডিটেকশন (স্প্যাম বা নন-স্প্যাম)
- রোগী সুস্থ বা অসুস্থ কিনা নির্ধারণ
- ক্রেডিট কার্ড প্রতারণা শনাক্তকরণ
২. সহজ এবং তাড়াতাড়ি কাজ করা মডেল:
লজিস্টিক রিগ্রেশন একটি সহজ মডেল যা তুলনামূলকভাবে দ্রুত প্রশিক্ষিত এবং পূর্বাভাস তৈরি করতে সক্ষম। এর সরলতার কারণে এটি অনেক সমস্যার জন্য একটি ভালো বেসলাইন মডেল হিসেবে কাজ করতে পারে।
৩. প্রবণতা বিশ্লেষণ (Probabilistic Interpretation):
লজিস্টিক রিগ্রেশন আউটপুট হিসাবে সম্ভাবনা (probability) প্রদান করে, যা ক্লাস 1 (যেমন স্প্যাম) হওয়ার সম্ভাবনা নির্দেশ করে। এই সম্ভাবনাকে আরও ব্যবহারিক উদ্দেশ্যে যেমন রিস্ক বা বিকল্প সিদ্ধান্ত গ্রহণ এর জন্য ব্যবহৃত করা যেতে পারে।
৪. ডেটার সাদৃশ্য বজায় রাখা (Maintaining Linearity):
লজিস্টিক রিগ্রেশন লিনিয়ার মডেল হলেও, এটি সিগময়েড ফাংশন ব্যবহার করে মডেলটির আউটপুটকে সীমাবদ্ধ রাখে (0 থেকে 1)। এর মাধ্যমে লিনিয়ার সম্পর্ক থাকলেও, ফলস্বরূপ সিদ্ধান্ত দুটি শ্রেণীর মধ্যে থাকে এবং এটি কমপ্লেক্স শ্রেণীবিভাগ সমস্যাগুলোর জন্য কার্যকরী হতে পারে।
৫. এফিশিয়েন্ট এবং দ্রুত প্রশিক্ষণ:
এটি কম্পিউটেশনালভাবে কার্যকরী এবং ডেটার ওপর দ্রুত মডেল ট্রেনিং করতে সক্ষম। বিশেষ করে ছোট এবং মাঝারি আকারের ডেটাসেটগুলোর জন্য এটি একটি উপযুক্ত মডেল।
৬. মাল্টিক্লাস ক্লাসিফিকেশনেও ব্যবহার করা যেতে পারে:
যদিও লজিস্টিক রিগ্রেশন মূলত দ্বিতীয় শ্রেণী সমস্যা সমাধানে ব্যবহৃত হয়, তবে এটি মাল্টিক্লাস ক্লাসিফিকেশন সমস্যা সমাধানের জন্যও সম্প্রসারিত হতে পারে, যেমন ওন্যি-ভী বা একাধিক শ্রেণি (One-vs-Rest) পদ্ধতি ব্যবহার করে।
লজিস্টিক রিগ্রেশন এর কাজের উদাহরণ:
উদাহরণ: ইমেইল স্প্যাম ডিটেকশন
ধরা যাক, আমাদের কাছে ইমেইলের কিছু বৈশিষ্ট্য যেমন অন্তর্ভুক্ত শব্দ (keywords), অ্যাটাচমেন্ট থাকলে, ইমেইল দৈর্ঘ্য, প্রেরকের ঠিকানা ইত্যাদি রয়েছে এবং আমাদের কাজ হলো ইমেইলটি স্প্যাম না নন-স্প্যাম তা চিহ্নিত করা।
এই সমস্যাটির জন্য লজিস্টিক রিগ্রেশন ব্যবহার করলে:
- আমাদের ডেটাসেটের বৈশিষ্ট্যগুলো ইনপুট হিসেবে নেবো।
- একটি লিনিয়ার সম্পর্ক তৈরি হবে, যা এই বৈশিষ্ট্যগুলো থেকে সম্ভাবনা বের করবে।
- এই সম্ভাবনা একটি সিগময়েড ফাংশনের মাধ্যমে 0 এবং 1 এর মধ্যে রূপান্তরিত হবে।
- ফলস্বরূপ, যদি 0.5 এর বেশি হয়, তাহলে এটি স্প্যাম হতে পারে এবং 0.5 এর কম হলে নন-স্প্যাম।
লজিস্টিক রিগ্রেশন এর গণনা:
ধরা যাক, ডেটা ভেরিয়েবল এবং আউটপুট (স্প্যাম বা নন-স্প্যাম), তাহলে লজিস্টিক রিগ্রেশন মডেলটি নিম্নরূপ হবে:
এখানে, হলো প্যারামিটার এবং হলো ন্যাচারাল লগারিদমের ভিত্তি।
সারাংশ
লজিস্টিক রিগ্রেশন একটি শক্তিশালী এবং সহজলভ্য মেশিন লার্নিং অ্যালগরিদম, যা ক্লাসিফিকেশন সমস্যাগুলোর জন্য ব্যবহৃত হয়, বিশেষত দ্বিতীয় শ্রেণী ক্লাসিফিকেশন (যেমন 0 এবং 1, স্প্যাম এবং নন-স্প্যাম) সমস্যার জন্য। এটি সিগময়েড ফাংশন ব্যবহার করে সম্ভাবনা নির্ধারণ করে এবং দ্রুত, কম্পিউটেশনালভাবে কার্যকরী মডেল প্রদান করে। এর সুবিধাগুলোর মধ্যে সহজতা, দ্রুত প্রশিক্ষণ, এবং সম্ভাবনা বিশ্লেষণের সুবিধা রয়েছে, যা এটিকে বিভিন্ন বাস্তব বিশ্ব সমস্যা সমাধানে জনপ্রিয় মডেল করে তোলে।
Logistic Regression একটি জনপ্রিয় Supervised Learning অ্যালগরিদম, যা Classification সমস্যার সমাধান করতে ব্যবহৃত হয়। এটি একটি লিনিয়ার মডেল হলেও আউটপুট হিসেবেও একটি সিগময়েড (sigmoid) ফাংশন ব্যবহার করে, যা প্রেডিকশনকে একটি সম্ভাবনা (probability) হিসেবে রূপান্তরিত করে এবং সেই অনুযায়ী ক্লাস (যেমন, 0 অথবা 1) প্রদান করে।
এখানে Python দিয়ে একটি Logistic Regression মডেল তৈরি করার উদাহরণ দেওয়া হলো।
১. ডেটাসেট লোড এবং প্রাথমিক প্রস্তুতি
আমরা Iris dataset ব্যবহার করব, যা একটি জনপ্রিয় ডেটাসেট, যেখানে বিভিন্ন ফুলের প্রকারভেদ ক্লাসিফিকেশন করা হয়। তবে, এখানে আমরা দুটি শ্রেণী (setosa এবং versicolor) নিয়ে কাজ করব, যেহেতু Logistic Regression মূলত বাইনারি ক্লাসিফিকেশন সমস্যার জন্য ব্যবহার হয়।
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import numpy as np
# Iris dataset লোড করা
iris = load_iris()
X = iris.data
y = iris.target
# 0 এবং 1 শ্রেণীর ডেটা (setosa এবং versicolor) নেবো
X = X[y != 2]
y = y[y != 2]
# ডেটাসেটটিকে ট্রেনিং এবং টেস্টিং সেটে ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
২. Logistic Regression মডেল তৈরি এবং প্রশিক্ষণ
এখন আমরা LogisticRegression ক্লাস ব্যবহার করে মডেল তৈরি করব এবং প্রশিক্ষণ দেব।
# Logistic Regression মডেল তৈরি করা
log_reg = LogisticRegression()
# মডেলটিকে ট্রেনিং ডেটা দিয়ে প্রশিক্ষণ দেয়া
log_reg.fit(X_train, y_train)
৩. মডেল দিয়ে পূর্বাভাস (Prediction) করা
এখন, প্রশিক্ষিত মডেল ব্যবহার করে আমরা টেস্ট ডেটাতে পূর্বাভাস করতে পারব।
# টেস্ট ডেটাতে পূর্বাভাস করা
y_pred = log_reg.predict(X_test)
# ফলাফল দেখা
print("Predicted Labels:", y_pred)
print("Actual Labels:", y_test)
৪. মডেল মূল্যায়ন (Model Evaluation)
আমরা এখন মডেলটির কার্যকারিতা মূল্যায়ন করব। এর জন্য accuracy_score, confusion_matrix, এবং classification_report ব্যবহার করা হবে।
# মডেল accuracy চেক করা
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# Confusion Matrix দেখানো
conf_matrix = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:\n", conf_matrix)
# Classification Report দেখানো
class_report = classification_report(y_test, y_pred)
print("Classification Report:\n", class_report)
৫. ফলাফল বিশ্লেষণ
এটি মডেলের পারফরম্যান্স সম্পর্কে বিস্তারিত ফলাফল সরবরাহ করবে। Confusion Matrix দেখাবে সঠিক এবং ভুল শ্রেণীকরণের সংখ্যা, এবং Classification Report পারফরম্যান্সের জন্য Precision, Recall, এবং F1-score দেখাবে।
উদাহরণ আউটপুট:
Accuracy: 1.0
Confusion Matrix:
[[15 0]
[ 0 15]]
Classification Report:
precision recall f1-score support
0 1.00 1.00 1.00 15
1 1.00 1.00 1.00 15
accuracy 1.00 30
macro avg 1.00 1.00 1.00 30
weighted avg 1.00 1.00 1.00 30
এখানে accuracy 1.0, অর্থাৎ আমাদের মডেলটি 100% সঠিকভাবে পূর্বাভাস দিয়েছে।
সারাংশ
Logistic Regression একটি সোজা, তবে শক্তিশালী ক্লাসিফিকেশন অ্যালগরিদম যা আমাদেরকে বাইনারি ক্লাসিফিকেশন সমস্যা সমাধানে সাহায্য করে। আমরা এখানে LogisticRegression মডেলটি তৈরি করে সেটি প্রশিক্ষণ, পূর্বাভাস এবং মূল্যায়ন করেছি। এই পদ্ধতি মেশিন লার্নিং প্রকল্পে সাধারণত ব্যবহৃত হয় এবং সহজেই ক্লাসিফিকেশন সমস্যা সমাধানে ব্যবহৃত হতে পারে।
Confusion Matrix এবং Accuracy হল মেশিন লার্নিং এর মৌলিক পরিমাপ যেগুলি মডেলের কার্যকারিতা (performance) মূল্যায়নে ব্যবহৃত হয়, বিশেষত ক্লাসিফিকেশন মডেল এর ক্ষেত্রে।
Confusion Matrix
Confusion Matrix একটি টেবিল বা ম্যাট্রিক্স যা মডেলের ভবিষ্যদ্বাণী করা (predicted) এবং বাস্তব (actual) ফলাফলগুলির মধ্যে তুলনা প্রদর্শন করে। এটি ক্লাসিফিকেশন সমস্যার ক্ষেত্রে সাধারণত ২টি শ্রেণি (binary classification) অথবা একাধিক শ্রেণি (multi-class classification) হতে পারে। এটি চারটি প্রধান পরিমাপ থেকে তৈরি হয়:
- True Positive (TP): যখন মডেল সঠিকভাবে একটি ইতিবাচক (positive) ক্লাস চিহ্নিত করে।
- True Negative (TN): যখন মডেল সঠিকভাবে একটি নেতিবাচক (negative) ক্লাস চিহ্নিত করে।
- False Positive (FP): যখন মডেল ভুলভাবে একটি নেতিবাচক ক্লাসকে ইতিবাচক হিসাবে চিহ্নিত করে (Type I Error)।
- False Negative (FN): যখন মডেল ভুলভাবে একটি ইতিবাচক ক্লাসকে নেতিবাচক হিসাবে চিহ্নিত করে (Type II Error)।
Confusion Matrix এর একটি সাধারণ ২ শ্রেণির উদাহরণ (Binary Classification)
| Predicted Positive (1) | Predicted Negative (0) | |
|---|---|---|
| Actual Positive (1) | True Positive (TP) | False Negative (FN) |
| Actual Negative (0) | False Positive (FP) | True Negative (TN) |
Confusion Matrix এর পরিমাপ
Confusion Matrix থেকে বিভিন্ন মেট্রিক (performance metrics) বের করা যায়, যেগুলি মডেলের কার্যকারিতা মূল্যায়নে সহায়ক। কয়েকটি গুরুত্বপূর্ণ পরিমাপ:
- Accuracy:
- এটি মডেলের সঠিকতার পরিমাপ, অর্থাৎ কতটি সঠিক ভবিষ্যদ্বাণী করা হয়েছে তা বের করার জন্য।
- Accuracy এর ফর্মুলা: যেখানে:
- TP: True Positive
- TN: True Negative
- FP: False Positive
- FN: False Negative
- Precision:
- এটি একটি ইতিবাচক শ্রেণির মধ্যে মডেল কতটা সঠিক তা পরিমাপ করে। এটি False Positive কমানোর জন্য গুরুত্বপূর্ণ।
- Precision এর ফর্মুলা:
- Recall (Sensitivity):
- এটি একটি ইতিবাচক শ্রেণির মধ্যে মডেল কতটা সঠিকভাবে পূর্বাভাস করেছে, অর্থাৎ কতোটা ইতিবাচক ক্লাস সঠিকভাবে চিহ্নিত করা হয়েছে।
- Recall এর ফর্মুলা:
- F1-Score:
- Precision এবং Recall এর একটি গড়। এটি একদিকে False Positives এবং অন্যদিকে False Negatives উভয়কেই সমন্বয় করে একটি সামগ্রিক ফলাফল প্রদান করে।
- F1-Score এর ফর্মুলা:
Accuracy
Accuracy হলো ক্লাসিফিকেশন মডেলের সবচেয়ে সাধারণ এবং সহজে বুঝতে আসা পরিমাপ। এটি মডেলের সঠিকতার শতাংশ হিসেবে গণনা করা হয়, অর্থাৎ সঠিক পূর্বাভাস করা মোট পূর্বাভাসের মধ্যে কতটুকু।
Accuracy এর ফর্মুলা:
এখানে:
- TP (True Positive): সঠিকভাবে চিহ্নিত ইতিবাচক (positive) উদাহরণ।
- TN (True Negative): সঠিকভাবে চিহ্নিত নেতিবাচক (negative) উদাহরণ।
- FP (False Positive): ভুলভাবে ইতিবাচক (positive) চিহ্নিত করা উদাহরণ।
- FN (False Negative): ভুলভাবে নেতিবাচক (negative) চিহ্নিত করা উদাহরণ।
Accuracy এর উদাহরণ:
ধরা যাক, একটি মডেল ১০০টি নমুনা নিয়ে পরীক্ষা করা হয়েছে, এবং এটি সঠিকভাবে ৮৫টি (True Positives + True Negatives) ভবিষ্যদ্বাণী করেছে, এবং ১৫টি ভুল ভবিষ্যদ্বাণী করেছে (False Positives + False Negatives)।
তাহলে, Accuracy হবে:
Confusion Matrix, Accuracy এবং অন্যান্য মেট্রিকের গুরুত্ব
- Accuracy সাধারণত সঠিকতা মাপার জন্য ব্যবহৃত হলেও, এটি সবসময় যথাযথ পরিমাপ নাও হতে পারে, বিশেষত যখন ডেটাসেটে শ্রেণীগুলির মধ্যে ভারসাম্য (imbalance) না থাকে। উদাহরণস্বরূপ, যদি একটি ডেটাসেটে ৯৫% নেতিবাচক (negative) উদাহরণ থাকে এবং ৫% ইতিবাচক (positive) উদাহরণ থাকে, তাহলে একটি মডেল যদি সবকিছু নেতিবাচক হিসেবেই চিহ্নিত করে, তাও Accuracy ৯৫% হতে পারে, তবে মডেলটি মোটেও কার্যকর হবে না।
- Precision এবং Recall সাধারণত গুরুত্বপূর্ণ, বিশেষত যখন মডেলটি False Positives এবং False Negatives কমাতে লক্ষ্য রাখে। যেমন মেডিক্যাল ডায়াগনসিসে, False Negative (যেখানে একটি রোগ সনাক্ত করা হয়নি) খুবই ক্ষতিকর হতে পারে, তাই Recall এখানে গুরুত্বপূর্ণ।
সারাংশ
- Confusion Matrix মডেলের পারফরম্যান্স বিশ্লেষণ করার জন্য একটি শক্তিশালী টুল। এটি বিভিন্ন পরিমাপ (Accuracy, Precision, Recall, F1-Score) প্রদান করে যা মডেলের কার্যকারিতা পর্যালোচনার জন্য ব্যবহৃত হয়।
- Accuracy হল একটি সাধারণ পরিমাপ, কিন্তু ভারসাম্যহীন ডেটাসেটে এটি বিভ্রান্তিকর হতে পারে। তাই Precision, Recall এবং F1-Score এর মতো অন্যান্য পরিমাপগুলিও বিবেচনা করা গুরুত্বপূর্ণ।
Read more